package com.siam.package_rider.service;

import com.siam.package_common.service.CurdService;
import com.siam.package_rider.entity.TbRider;
import com.siam.package_rider.model.param.RiderWithdrawParam;
import com.siam.package_rider.model.param.TbRiderParam;
import com.siam.package_rider.model.result.TbRiderResult;

/**
 * ---------------------------
 * 骑手表 (TbRiderService)         
 * ---------------------------
 * 作者：  高品
 * 时间：  2025-03-29 18:55:18
 * ---------------------------
 */
public interface TbRiderService extends CurdService<TbRider, TbRiderParam> {

    /**
     * 注册
     *
     * @author 高品
     */
    void register(TbRiderParam param);

    /**
     * 设置骑手账户信息（注册流程的第二步，提交后会自动登录）
     *
     * @author 高品
     */
    TbRiderResult fillAccountInfo(TbRiderParam param);

    /**
     * 提交接单资格相关信息
     *
     * @author 高品
     */
    void fillVerificationInfo(TbRiderParam param);

    /**
     * 注册（包含填写接单资格信息）
     *
     * @author 高品
     */
    void registerWithFillVerificationInfo(TbRiderParam param);

    /**
     * 通过手机号查询用户信息
     *
     * @author 高品
     */
    TbRider selectByMobile(String mobile);

    /**
     * 登录-账号密码
     *
     * @author 高品
     */
    TbRiderResult login(TbRiderParam param);

    /**
     * 验证码登录
     * 1) 现在验证码登录接口关联了openid属性，目的是为了在下单时直接获取openid
     * 2) 其实不应该这样做，应该是在下单时获取当前运行小程序的微信号的openid，
     * 3) 由于每次切换微信账号时小程序必定是会重新修改openid的，所以也不会造成bug，暂时先这样写就不改动了
     *
     * @author 高品
     */
    TbRiderResult verificationLogin(TbRiderParam param);

    /**
     * 微信登录
     *
     * @author 高品
     */
    TbRiderResult wxLogin(TbRiderParam param);

    /**
     * 获取登录用户信息
     *
     * @author 高品
     */
    TbRiderResult getLoginUserInfo(TbRiderParam param);

    /**
     * 解除账号绑定的微信
     *
     * @author 高品
     */
    void removeBindingWx(TbRiderParam param);

    /**
     * 上传头像
     *
     * @author 高品
     */
    void uploadHeadImg(TbRiderParam param);

    /**
     * 修改登录密码
     *
     * @author 高品
     */
    void updatePassword(TbRiderParam param);

    /**
     * 登出
     *
     * @author 高品
     */
    void logout(TbRiderParam param);

    /**
     * 上报使用/进入小程序的定位地址
     *
     * @author 高品
     */
    void updateLastUseAddress(TbRiderParam param);

    /**
     * 设置/找回支付密码第一步
     *
     * @author 高品
     */
    void forgetPaymentPasswordStep1(TbRiderParam param);

    /**
     * 设置/找回支付密码第二步
     *
     * @author 高品
     */
    void forgetPaymentPasswordStep2(TbRiderParam param);

    /**
     * 验证支付密码是否正确(场景：支付、提现)
     *
     * @author 高品
     */
    void verifyPaymentPassword(TbRiderParam param);

    /**
     * 修改操作
     * @param param
     * @return
     */
    void updateByAdmin(TbRiderParam param);

    /**
     * 提现
     *
     * @author 高品
     */
    void withdrawal(RiderWithdrawParam param);
}